package com.wanshu.sys.controller;

import com.wanshu.sys.model.SysRoleQueryDto;
import com.wanshu.common.util.PageUtils;
import com.wanshu.sys.entity.SysRole;
import com.wanshu.sys.model.res.roleMenuTree.RoleMenuTreeRes;
import com.wanshu.sys.service.ISysRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 角色 前端控制器
 * </p>
 *
 * @author 波哥
 * @since 2023-05-09
 */
@Api(tags = "系统角色", value = "系统角色模块 描述")
//@CrossOrigin  //放开跨域的解决方案之一， 整合springSecurity后，会使之失效。 用配置corsConfigurationSource()解决
@RestController
@RequestMapping("/sys/sysRole")
public class SysRoleController {

    @Resource
    private ISysRoleService sysRoleService;

    /**
     * 分页查询
     *
     * @param sysRoleQueryDto 系统角色查询dto
     * @return {@link PageUtils }
     * @author 张颖辉（zyh）
     * @date 2023/06/01
     * @version 1.0.0
     */
    @ApiOperation(value = "查询角色数据", notes = "查询系统内的角色数据信息")
    @GetMapping("list")
    public PageUtils<SysRole> list(@ApiParam(value = "查询条件") SysRoleQueryDto sysRoleQueryDto) {
        return sysRoleService.queryPage(sysRoleQueryDto);
    }

    /**
     * 保存
     *
     * @param sysRole 系统作用
     * @return {@link String }
     * @author 张颖辉（zyh）
     * @date 2023/06/01
     * @version 1.0.0
     */
    @ApiOperation(value = "添加角色", notes = "添加角色数据信息")
    @PostMapping("save") //@RequestBody 的请求必须要用post
    public String save(@RequestBody SysRole sysRole) {
        sysRoleService.saveRole(sysRole);
        return "success";
    }

    /**
     * 其他角色是否已经有重复的名称
     * 是否存在角色名称，但不是当前的角色
     *
     *
     * @param sysRole 角色
     * @return {@link Boolean }
     * @author 张颖辉（zyh）
     * @date 2023/06/01
     * @version 1.0.0
     */
    @ApiOperation(value = "角色是否存在", notes = "角色名称是否存在，存在返回true,不存在返回false")
    @PostMapping("existRoleName")
    public Boolean existRoleName(@RequestBody SysRole sysRole) {
        return sysRoleService.existRoleName(sysRole);
    }


    /**
     * 通过id删除角色
     *
     * @param roleId 角色id
     * @return {@link Boolean }
     * @author 张颖辉（zyh）
     * @date 2023/06/06
     * @version 1.0.0
     */
    @ApiOperation(value = "删除角色", notes = "删除角色数据信息")
    @PostMapping("deleteById")
    public Boolean deleteById(@ApiParam(value = "角色id") Long roleId) {
        return sysRoleService.deleteById(roleId);
    }


    /**
     * 调度程序角色菜单
     *
     * 返回内容：
     * 1、全部菜单
     * 2、根据角色菜单查询角色关联的菜单
     *
     * @param roleId 角色id
     * @return {@link RoleMenuTreeRes }
     * @author 张颖辉（zyh）
     * @date 2023/07/12
     * @version 1.0.0
     */
    @ApiOperation(value = "调度角色菜单", notes = "调度角色菜单")
    @GetMapping("dispatcherRoleMenu")
    public RoleMenuTreeRes dispatcherRoleMenu(@ApiParam(value = "角色ID") Long roleId){
        return sysRoleService.dispatcherRoleMenu(roleId);
    }


    /**
     * 列出所有
     *
     * @return {@link PageUtils }<{@link SysRole }>
     * @author 张颖辉（zyh）
     * @date 2023/07/18
     * @version 1.0.0
     */
    @ApiOperation(value = "查询全量角色数据", notes = "查询系统内的全量角色数据信息")
    @GetMapping("listAll")
    public List<SysRole> listAll() {
        return sysRoleService.list();
    }
}
